#ifndef DYNAMICARRAY_H
#define DYNAMICARRAY_H

#include <iostream>
#include <cstring>

using namespace std;
class dynamicArray
{
private:
    double *data;  // 存放数组的动态内存指针
    int size;      // 数组的元素个数
    int max;       // 预留给动态数组的内存大小

private:
    void init();      // 初始化
    void free();
    inline bool InvalidateIndex(int index); // 判断下标的合法性

public:
    dynamicArray(); // 默认构造函数
    dynamicArray(int nSize, double dValue = 0); // 构造函数，设置数组大小，默认值为dValue
    dynamicArray(const dynamicArray& arr);  // 拷贝构造函数
    dynamicArray& operator=(const dynamicArray& arr); // 拷贝赋值运算符
    ~dynamicArray();    // 析构函数

    void print();       // 输出显式所有数组元素的值
    int getSize();      // 获取数组的大小（元素个数）
    void setSize(int nSize); // 重新设置数组的大小，若nSize小于原大小，截断；否则，新元素置0
    double getPositionElement(int index); // 获取指定位置元素
    void setPositionElement(int index, double dValue); // 重置指定元素的值
    void pushBack(double dValue); // 追加一个新元素到数组末尾
    void deletePositionElement(int index); // 删除指定位置地元素
    void insertPositionElement(int index, double dValue); // 插入一个新的元素到数组中
    double operator[](int index) const; // 重载下标运算符[]
};

class String{
    friend ostream& operator<< (ostream&,String&); //重载<<运算符
    friend istream& operator>> (istream&,String&); //重载>>运算符
public:
    String();   // 默认构造函数
    String(const char* str);       // 带参构造函数
    String(const String& rhs);        // 拷贝构造函数
    String& operator=(const String& rhs);   // 拷贝赋值运算符
    String operator+(const String& rhs) const;  //operator+
    bool operator==(const String&);              //operator==
    bool operator!=(const String&);              //operator!=
    char& operator[](unsigned int);              //operator[]
    size_t size() const;
    const char* c_str() const;
    ~String();    // 析构函数
private:
    char *m_data; // 用于保存字符串
};
#endif // DYNAMICARRAY_H
